<?php
class Minima extends TPage {
 
    public function onLoad($param) {
        parent::onLoad($param);
        if (!$this->IsPostBack) {
            $this->validarSession();
            $this->cargarInterfaz();
        }
    }
    
    private function validarSession(){
        $oUsuario = Util::getSession("Usuario");
        if (Util::isNullOrEmpty($oUsuario)) {
            $this->Response->redirect($this->Service->constructUrl("Home"));
        }
    }
    
    private function cargarInterfaz(){        
        try{
            $oPaciente = $this->obtenerDatosPaciente();
            $this->iniciarControles($oPaciente);
            
        }  catch (Exception $e){
            throw new Exception($e->getMessage());
        }        
    }
    
    private function obtenerDatosPaciente(){
        try{
            $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");                  

            if($idPaciente != "-1"){    
                $oPaciente = new Paciente(); 
                $oPacienteBLL = new PacienteBLL();
                $oPaciente = $oPacienteBLL->obtenerPorId($idPaciente);                

                return $oPaciente;
            }else{                
                $oPaciente = null;
                
                return $oPaciente;
            }
        } catch (Exception $e){
            throw new Exception($e->getMessage());
        }
        
    }
    
    private function iniciarControles($oPaciente){
        $this->txtPeso->Attributes->Add("required","");
        $this->txtCintura->Attributes->Add("required","");
        $this->txtCCOmbligo->Attributes->Add("required","");
        $this->AutoComplete->Attributes->Add("placeholder","Buscar paciente por rut o nombre");        
   
        try{
            if(count($oPaciente) != null){
                $this->pnlControlesEvaluacion->Visible = true;
                $this->pnlMensajeSinPaciente->Visible = false;
                
                $edad = Util::calcularEdadDecimal($oPaciente->getFechaNacimiento());
                
                $this->imgPaciente->ImageUrl = $oPaciente->getImagen();
                $this->edadDecimal->Value = $edad;
                $this->idPaciente->Value = $oPaciente->getId();
                if($oPaciente->getSexo() == "Masculino"){
                    $this->sexoPaciente->Value = 1;                    
                }else if($oPaciente->getSexo() == "Femenino"){
                    $this->sexoPaciente->Value = 0;                    
                }                
                $this->lblNombreApellido->Text = $oPaciente->getNombre() .' '. $oPaciente->getApellido();
            }else{
                $this->pnlControlesEvaluacion->Visible = false;
                $this->pnlMensajeSinPaciente->Visible = true;
                $this->litMensajeSinPaciente->Text = "Para registrar una evaluaci&oacute;n debe seleccionar un paciente <a href='?page=Paciente.Listar' style='color: #ff0;'>AQU&Iacute;</a> o en el buscador superior.";
                $this->btnAgregar->Attributes->Add("disabled","disabled");
                $this->litMensajeBoton->Text = "El bot&oacute;n de registro est&aacute; desactivado, debe seleccionar un paciente.";
                $this->lblNombreApellido->Text = "";
                $this->litAlert->Text = Util::setMensajeUsuario("Para registrar una evaluaci&oacute;n debe seleccionar un paciente <a href='?page=Paciente.Listar'>AQU&Iacute;</a> o en el buscador.", Util::MENSAJE_INFO);
            }        
            
        }catch(Exception $e){
            $this->litAlert->Text = Util::setMensajeUsuario("Lo sentimos, se ha producido un error al cargar la p&aacute;gina.", Util::MENSAJE_ERROR);
        }
    }
    
    public function btnRegistrarEvaluacionOnClick($sender, $param){
        try{
            $oEvaluacionNormal = new EvaluacionNormal();

            $oEvaluacionNormal->setFechaEvaluacion(Util::fechaNormalADateTime(Util::getFechaHoraActual()));
            $oEvaluacionNormal->setPeso($this->txtPeso->Text);
            $oEvaluacionNormal->setCintura($this->txtCintura->Text);
            $oEvaluacionNormal->setCcOmbligo($this->txtCCOmbligo->Text);  
            $oEvaluacionNormal->setComentario($this->txtComentarioEvaluacion->Text);
            $oEvaluacionNormal->setIdPaciente($this->idPaciente->Value);

            $oEvaluacionNormalBLL = new EvaluacionNormalBLL();
            $idEvaluacion = $oEvaluacionNormalBLL->grabar($oEvaluacionNormal);

            if(is_int($idEvaluacion) && $idEvaluacion > 0){
                try{                    
                    $oEvaluacionHistorial = new HistorialEvaluaciones();
                    
                    //obtengo ultima evaluacion para calcular diferencias entre valores
                    $oUltimaEvaluacionBLL = new HistorialEvaluacionesBLL();
                    $oUltimaEvaluacion = $oUltimaEvaluacionBLL->obtenerUltimaEvaluacion($this->idPaciente->Value);
                    
                    $oEvaluacionHistorial->setNumeroEvaluacion($oUltimaEvaluacion->getNumeroEvaluacion() + 1);
                    $oEvaluacionHistorial->setFechaEvaluacion(Util::fechaNormalADateTime(Util::getFechaHoraActual()));
                    $oEvaluacionHistorial->setPeso($this->txtPeso->Text);
                    if($oUltimaEvaluacion->getNumeroEvaluacion() == 0){
                        $oEvaluacionHistorial->setDiferenciaPeso(0);
                        $oEvaluacionHistorial->setDiferenciaCintura(0);
                        $oEvaluacionHistorial->setDiferenciaCOmbligo(0);
                    }else{
                        $oEvaluacionHistorial->setDiferenciaPeso($oUltimaEvaluacion->getPeso() - $this->txtPeso->Text);
                        $oEvaluacionHistorial->setDiferenciaCintura($oUltimaEvaluacion->getCintura() - $this->txtCintura->Text);
                        $oEvaluacionHistorial->setDiferenciaCOmbligo($oUltimaEvaluacion->getCCOmbligo() - $this->txtCCOmbligo->Text);
                    }
                    $oEvaluacionHistorial->setCintura($this->txtCintura->Text);
                    $oEvaluacionHistorial->setCCOmbligo($this->txtCCOmbligo->Text);
                    $oEvaluacionHistorial->setComentario($this->txtComentarioEvaluacion->Text);
                    $oEvaluacionHistorial->setIdPaciente($this->idPaciente->Value);
                    
                    $oEvaluacionHistorialBLL = new HistorialEvaluacionesBLL();
                    $idHistorial = $oEvaluacionHistorialBLL->grabar($oEvaluacionHistorial);
                    
                    if(is_int($idHistorial) && $idHistorial > 0){
                        $this->litAlert->Text = Util::setMensajeUsuario("La evaluaci&oacute;n se ha registrado exitosamente.", Util::MENSAJE_OK);
                        $this->limpiarForm();
                    }else{
                        $oEvaluacionHistorialBLL->eliminar($idHistorial);
                        $this->litAlert->Text = Util::setMensajeUsuario("Se ha producido un error el registrar la evaluaci&oacute;n, por favor vuelva a intentarlo.", Util::MENSAJE_ERROR);
                    }
                    
                } catch (Exception $e){
                    $oEvaluacionNormal->eliminar($idEvaluacion);
                    $oEvaluacionHistorialBLL->eliminar($idHistorial);
                    throw new Exception($e->getMessage());
                }
            }else{
                $oEvaluacionNormal->eliminar($idEvaluacion);
                $oEvaluacionHistorialBLL->eliminar($idHistorial);
                $this->litAlert->Text = Util::setMensajeUsuario("Se ha producido un error el registrar la evaluaci&oacute;n, por favor vuelva a intentarlo.", Util::MENSAJE_ERROR);
            }
        }catch(Exception $e){
            $oEvaluacionNormalBLL->eliminar($idEvaluacion);
            $oEvaluacionHistorialBLL->eliminar($idHistorial);
            throw new Exception($e->getMessage());
        }
    }
    
    private function limpiarForm(){
        $this->txtPeso->Text = "";
        $this->txtCCOmbligo->Text = "";
        $this->txtCintura->Text = "";
        $this->idPaciente->Value = "";
        $this->txtComentario->Value = "";
    }        
    
    public function buscarPacientes($sender,$param) {        
        $consulta = $param->getToken();
        
        $oPacienteBLL = new PacienteBLL();
        
        $arrPacientes = $oPacienteBLL->obtenerPorBusqueda($consulta);
        $listaPacientes = array();
                
        foreach ($arrPacientes as $row){
            $paciente = array('id' => $row->getId(), 'paciente' => $row->getNombre());
            $listaPacientes[] = $paciente;
        }

        $this->AutoComplete->DataSource = $listaPacientes;
        $this->AutoComplete->dataBind();
    }
    
    public function pacienteSeleccionado($sender,$param){              
        $id = $sender->Suggestions->DataKeys[ $param->selectedIndex ];
        
        if($id > 0){
            Util::setSession("Paciente", $id);
            $this->Response->redirect("index.php?page=Evaluacion.Minima&idPaciente=" . $id);
        }else{
            $this->Response->redirect("index.php?page=Paciente.Listar");
        }        
    }
}
?>
